{$CLEO .qa}
{$USE CLEO+}
{$USE newOpcodes}
{$USE ini}

0000: NOP

script_name "Bat"

// By ArtemQa146

const
    Render_S = 31@
    Render_R = 30@
    Render_R2 = 29@
    Render_R3 = 28@
    Step = 27@
    Clip_X = 26@
    Clip_Y = 25@
    Clip_Z = 24@
    Weapon_ID = 5
end

0085: Render_S = 0@ // (int)
0085: Render_R = 1@ // (int)
0085: Render_R2 = 2@ // (int)
0085: Render_R3 = 3@ // (int)
0085: Step = 4@ // (int)

        gosub @Visible_Weapon
        set_script_event_char_damage 1 label @Damage var_char 0@
        
            repeat
            wait 0
            if and
                not actor.Driving($PLAYER_ACTOR)
                02D8:   actor $PLAYER_ACTOR current_weapon == Weapon_ID
            then
                0A8D: 1@ = read_memory 0xB7CDD0 size 4 virtual_protect 0
                08C3: clear 1@ bit 12
                0A8C: write_memory 0xB7CDD0 size 4 value 1@ virtual_protect 0

                if
                    Step < 2
                then
                    0E31: set_render_object_visible Render_S 1
                    0E31: set_render_object_visible Render_R 0
                    0E31: set_render_object_visible Render_R2 0
                    0E31: set_render_object_visible Render_R3 0
                end

                if and
                    Step >= 2
                    Step <= 10
                then
                    if
                        TIMERA > 20000
                    then
                        0006: TIMERA = 0
                        Step = 0
                    else
                        0E31: set_render_object_visible Render_S 0
                        0E31: set_render_object_visible Render_R 1
                        0E31: set_render_object_visible Render_R2 0
                        0E31: set_render_object_visible Render_R3 0
                    end
                end

                if and
                    Step > 10
                    Step <= 17
                then
                    if
                        TIMERA > 20000
                    then
                        0006: TIMERA = 0
                        Step = 2
                    else
                        0E31: set_render_object_visible Render_S 0
                        0E31: set_render_object_visible Render_R 0
                        0E31: set_render_object_visible Render_R2 1
                        0E31: set_render_object_visible Render_R3 0
                    end
                end

                if
                    Step > 17
                then
                    if
                        TIMERA > 20000
                    then
                        0006: TIMERA = 0
                        Step = 11
                    else
                        0E31: set_render_object_visible Render_S 0
                        0E31: set_render_object_visible Render_R 0
                        0E31: set_render_object_visible Render_R2 0
                        0E31: set_render_object_visible Render_R3 1
                    end
                end

            else
                break
            end
            until not player.Defined(0)
                0A8D: 1@ = read_memory 0xB7CDD0 size 4 virtual_protect 0
                08BD: set 1@ bit 12
                0A8C: write_memory 0xB7CDD0 size 4 value 1@ virtual_protect 0
                set_script_event_char_damage 0 label @Damage var_char 0@
            gosub @Hide_Weapon

0A93: terminate_this_custom_script


:Damage
get_char_damage_last_frame 0@ damager 2@ type 3@ part 4@ intensity 5@   // type = gun int, part = bone char int, intensity = damage float
get_ped_pointer 4@ = ped $PLAYER_ACTOR
if and
    003B:   4@ == 2@  // player damager
    3@ == Weapon_ID
then
    Step += 1
    TIMERA = 0
end
return_script_event


:Hide_Weapon
0E31: set_render_object_visible Render_S 0
0E31: set_render_object_visible Render_R 0
0E31: set_render_object_visible Render_R2 0
0E31: set_render_object_visible Render_R3 0
return

:Visible_Weapon
0E31: set_render_object_visible Render_S 1
0E31: set_render_object_visible Render_R 0
0E31: set_render_object_visible Render_R2 0
0E31: set_render_object_visible Render_R3 0
return
